package com.thz.system.service.matting;

import com.baomidou.mybatisplus.extension.service.IService;
import com.thz.common.dto.matting.ConversionImageMattingRequestDTO;
import com.thz.common.dto.matting.ConversionImageMattingResponseDTO;
import com.thz.common.entity.ConversionRecordImageMatting;
import org.springframework.web.multipart.MultipartFile;

/**
 * 图片抠图转换服务接口
 * 
 * @author THZ
 * @date 2025
 */
public interface IConversionImageMattingService extends IService<ConversionRecordImageMatting> {
    
    /**
     * 执行图片抠图转换（同步模式）
     * 
     * @param file 上传的图片文件
     * @param requestDTO 转换参数
     * @param ipAddress 客户端IP地址
     * @param userId 用户ID（可选）
     * @return 转换结果
     */
    ConversionImageMattingResponseDTO convertImageMatting(
            MultipartFile file, 
            ConversionImageMattingRequestDTO requestDTO, 
            String ipAddress, 
            Long userId);
    
    /**
     * 执行图片抠图转换（异步模式）
     * 立即返回记录ID，后台异步处理
     * 
     * @param file 上传的图片文件
     * @param requestDTO 转换参数
     * @param ipAddress 客户端IP地址
     * @param userId 用户ID（可选）
     * @return 转换记录ID和初始状态
     */
    ConversionImageMattingResponseDTO convertImageMattingAsync(
            MultipartFile file,
            ConversionImageMattingRequestDTO requestDTO,
            String ipAddress,
            Long userId);
    
    /**
     * 根据ID获取转换记录详情
     * 
     * @param id 记录ID
     * @return 转换结果
     */
    ConversionImageMattingResponseDTO getConversionDetail(Long id);
    
    /**
     * 保存手动抠图结果（创建新记录）
     * 
     * @param file 手动编辑后的图片文件
     * @param originalId 原始转换记录ID（可选）
     * @param ipAddress 客户端IP地址
     * @return 转换结果
     */
    ConversionImageMattingResponseDTO saveManualMattingResult(
            MultipartFile file,
            Long originalId,
            String ipAddress);
    
    /**
     * 更新手动抠图结果（替换原记录）
     * 
     * @param file 手动编辑后的图片文件
     * @param recordId 要更新的记录ID
     * @param ipAddress 客户端IP地址
     * @return 转换结果
     */
    ConversionImageMattingResponseDTO updateManualMattingResult(
            MultipartFile file,
            Long recordId,
            String ipAddress);
}



